package config

import (
	"fmt"
	"log"
	"simple-crm/models"

	"gorm.io/driver/mysql"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

func InitDB(cfg *Config) *gorm.DB {
	var db *gorm.DB
	var err error

	// 调试信息
	log.Printf("数据库配置 - Host: '%s', Port: '%s', User: '%s', Name: '%s'",
		cfg.Database.Host, cfg.Database.Port, cfg.Database.User, cfg.Database.Name)

	// 如果没有配置数据库主机，使用SQLite
	if cfg.Database.Host == "" {
		log.Println("使用SQLite数据库:", cfg.Database.Name)
		db, err = gorm.Open(sqlite.Open(cfg.Database.Name), &gorm.Config{
			Logger: logger.Default.LogMode(logger.Info),
		})
	} else {
		// 使用MySQL
		dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
			cfg.Database.User,
			cfg.Database.Password,
			cfg.Database.Host,
			cfg.Database.Port,
			cfg.Database.Name,
			cfg.Database.Charset,
		)
		log.Println("使用MySQL数据库:", dsn)
		db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
			Logger: logger.Default.LogMode(logger.Info),
		})
	}
	if err != nil {
		log.Fatal("连接数据库失败:", err)
	}

	// 自动迁移
	// if err := autoMigrate(db); err != nil {
	// 	log.Fatal("数据库迁移失败:", err)
	// }

	log.Println("数据库连接成功")
	return db
}

func autoMigrate(db *gorm.DB) error {
	// 自动迁移所有模型
	return db.AutoMigrate(
		&models.User{},
		&models.Role{},
		&models.Permission{},
		&models.UserRole{},
		&models.RolePermission{},
		&models.Customer{},
		&models.Partner{},
		&models.PushRecord{},
		&models.OperationLog{},
	)
}
